"""
处理Web界面提交的配置并生成代码。

作者：修炼者 7457222@qq.com
"""
from public.jygt_coder_loger import get_logger
from public.Task import Task
from public.DBInfo import DBInfo
from public.WebAPIInfo import WebAPIInfo
from public.TargetProjectInfo import TargetProjectInfo
from process.generate_code import generateCode
import os

logger = get_logger(__name__)

class JygtCoderProcess:
    def generate_project(self, config):
        """
        处理Web表单提交的配置并生成项目代码
        
        Args:
            config: 包含数据库配置和输出路径的字典
                {
                    'db_type': 数据库类型,
                    'host': 数据库主机,
                    'port': 数据库端口,
                    'database': 数据库名,
                    'username': 用户名,
                    'password': 密码,
                    'output_path': 输出路径
                }
        
        Returns:
            dict: 包含处理结果的字典
                {
                    'success': bool,
                    'error': str (可选，当success为False时存在)
                }
        """
        try:
            # 创建数据库信息对象，直接传入所需参数
            db_info = DBInfo(
                host=config['host'],
                port=config['port'],
                user=config['username'],
                password=config['password'],
                database=config['database']
            )
            
            # 验证数据库类型
            if config['db_type'] not in ['mysql', 'postgresql', 'oracle']:
                return {'success': False, 'error': f'不支持的数据库类型: {config["db_type"]}'}
            
            # 创建Web API信息对象，直接传入所需参数
            web_api_info = WebAPIInfo(
                host='localhost',
                port=5000,
                path='/graphql'
            )
            
            # 创建目标项目信息对象，直接传入所需参数
            output_path = os.path.abspath(config['output_path'])
            target_project_info = TargetProjectInfo(
                root_dir=output_path,
                db_name=config['database']
            )
            
            # 创建Task对象，传入所有必要参数
            task = Task(db_info, web_api_info, target_project_info)
            
            # 生成代码
            success = generateCode(task)
            
            if success:
                return {'success': True}
            else:
                return {'success': False, 'error': '代码生成失败，请检查日志获取详细信息'}
                
        except Exception as e:
            logger.error(f"生成项目时发生错误: {str(e)}")
            return {'success': False, 'error': str(e)}